추천기능 API를 연동합니다.#331
Conversation
…330-API-Sync # Conflicts: # MLS/MLS.xcodeproj/project.pbxproj
- AppCoordinator, AppDelegate에 RecommendationFeature 등록 - MLSCore에 TokenInterceptor 추가 (키체인 직접 접근) - RecommendationRepositoryImpl 내부에서 NetworkProvider, Interceptor 생성 - UserProfileDTO, JobDTO 응답 래퍼 구조 반영 - RecommendationEndPoint 쿼리 파라미터 Int32 타입 적용 - viewWillAppear마다 데이터 갱신 - 추천 화면 탭바 영역 레이아웃 수정 - MLSCore NetworkProviderImpl 로깅 Loggable 적용
There was a problem hiding this comment.
Code Review
This pull request introduces the 'Recommendation' feature, including the necessary data layer (DTOs, Endpoints, Repository), domain entities, and presentation layer (Reactor, ViewController, Factory). It also adds a TokenInterceptor for network requests and updates the existing BottomTabBar to support dynamic tab items. My review highlights several areas for improvement: addressing potential cell reuse issues in the collection view, optimizing parallel network requests in the Reactor, externalizing hardcoded configurations (API URLs and Keychain keys), and improving dependency injection to reduce coupling. I also recommend adding error handling for failed network requests to improve the user experience.
|
기존/신규 아키텍처가 섞여 있는 상태에서 구현 및 수정을 하는 것이 쉽지 않으셨을 듯 합니다.. 역시 논의했던대로 확실한 모듈 정리가 필요해보이네요 ㅠㅠ TokenInterceptor가 현재 키체인에 직접 접근하는 구조도 최대한 빠르게 정리가 필요해 보입니다. 지금 상황에서는 현실적인 우회로 이해되지만, 이후에 protocol 기반으로 주입하거나 Auth/Core 구조를 정리하는 방향으로 개선하면 될까싶네요..? 어쨌든 구 모듈과 신 모듈이 공존하면서 생기는 동일 타입의 충돌부터 빠르게 해결해 봅시다!! 추가로 커스텀 탭바 safeArea 문제를 이번 PR에서 바로 건드리지 않고 별도 작업으로 분리한 부분도 좋았습니다! 추후 작업 분배에 있어서 빼먹지않고 진행하면 될 것 같아요~ 다만 궁금한점이 현재 RecommendationFeature 내부에 profile/job/recommendation repository를 직접 추가했다부분에서 profile/job은 모델을 말씀하시는건가요?? 제가 이해를 잘 못해서 부연 설명 좀 더 부탁드립니다!! 제미나이 피드백 관련 코드 수정사항 없으시면 병합 진행하셔도 될 것 같아요~! |
DTO와 repository를 말씀드린 거였어요! 부연 설명이 부족했네요.! 현재 RecommendationFeature에 profile / job / recommendation API 호출 메서드를 포함하는 임시 레포지토리와 DTO, Entity를 직접 추가해둔 상태인데요, 원래대로라면
에서 가져와야 합니다. 다만 지금은 모듈 분리가 완료되지 않은 상태라 일단 임시로 구성해뒀고, 모듈 정리가 완료되면 각각 원래 레포로 교체할 예정입니다! |
📌 이슈
✅ 작업 사항
추천 탭 본앱 연동
AppCoordinator,AppDelegate에RecommendationMainFactory등록 및 탭바 가장 좌측(index 0)에 추천 탭 추가BottomTabBarControllerinit에tabItems파라미터 추가 — 기존 3탭 호출부는 기본값으로 backward compatible 유지API 연동
연동한 엔드포인트:
GET /api/v1/auth/meGET /api/v1/jobs/{jobId}GET /api/v1/maps/recommendationslevel,jobId,limit쿼리)Reactor / ViewController
RecommendationMainReactor—viewWillAppear마다 프로필·추천 데이터 재요청TooltipFactory)MLSCore
NetworkProviderImpl로깅 —print전부 제거,Loggable채택 및 OSLog 기반으로 교체TokenInterceptor추가 (아래 ETC 참고)MLSDesignSystem
CardListtagChip 레이아웃 충돌 수정스크린샷
Simulator.Screen.Recording.-.iPhone.17.Pro.-.2026-05-14.at.00.00.22.mov
👀 ETC
MLSCore에 추가한TokenInterceptor는 키체인에 직접 접근하는 임시 구현입니다 (service: "keyChain",account: "accessToken"하드코딩).현재 앱은 신규 모듈(
MLSCore기반)과 구 모듈(Core/DomainInterface기반)이 혼재된 상황입니다. 두 아키텍처에NetworkProvider,Interceptor등 동일한 이름의 타입이 각각 존재하기 때문에, 한 파일에서 두 모듈을 동시에 import하면 이름 충돌이 발생합니다. 이로 인해 원래대로라면 외부에서 주입받아야 할 의존성을 주입 방식으로 처리할 수 없었고, 임시로 내부에서 직접 생성하는 방식을 택했습니다.앞으로 남은 도감, 북마크 기능도 신규 모듈로 빠르게 대치하지 않으면 이번과 같은 문제가 반복될 것 같습니다. 추천 화면 이후 작업을 이어가기 위해서도 구 모듈 대치 작업을 진행하는 게 좋을 것 같습니다.
또한 현재 이번 작업에서 job, profile, 추천 레포지토리를
MLSRecommendationFeature모듈 내에 직접 추가했는데, 앞으로 각 기능 모듈의 Interface에 레포지토리들이 정리되어 공개되면 해당 모듈을 그대로 가져다 쓰는 방식으로 중복 레포지토리 문제도 자연스럽게 해결될 것 같습니다.BottomTabBarController가 시스템tabBar를 숨기고 커스텀 탭바를 올리는 구조이다 보니, child VC의safeAreaInsets.bottom에 탭바 높이가 자동으로 반영되지 않습니다. 현재는 각 화면에서 64pt를 하드코딩으로 넣어주는 방식으로 대응하고 있는데, 이 부분도 개선이 필요해 보입니다. (BottomTabBarController에서additionalSafeAreaInsets.bottom을 설정하면 해결되지만, 기존 화면들에 미치는 영향 검토가 필요해 별도 작업으로 분리했습니다.)추천 화면 이후 남은 작업